#include <SimpleAmqpClient/SimpleAmqpClient.h>
#include <iostream>

int main() {
    try {
        // 创建连接
        AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("localhost");
        
        // 声明队列
        //std::string queue_name = channel->DeclareQueue("test_queue");
        // 声明队列
        std::string queue_name = channel->DeclareQueue(
            "test_queue",  // 队列名称
            false,         // passive - 是否被动声明
            false,         // durable - 队列是否持久化
            false,         // exclusive - 是否排他
            false         // auto_delete - 是否自动删除
        );
        
        // 设置消费者
        std::string consumer_tag = channel->BasicConsume(
            queue_name,   // 队列名称
            "",           // 消费者标签
            true,         // no_local
            true,         // no_ack - 自动确认
            false,        // exclusive
            10            // 消息预取数量
        );
        
        std::cout << "Waiting for messages. To exit press CTRL+C" << std::endl;
        
        while (true) {
            // 获取消息
            AmqpClient::Envelope::ptr_t envelope = channel->BasicConsumeMessage(consumer_tag);
            
            // 处理消息
            std::string message_body = envelope->Message()->Body();
            std::cout << "Received message: " << message_body << std::endl;
            
            // 手动确认消息（如果 no_ack 为 false）
            // channel->BasicAck(envelope);
        }
        
    } catch (const std::exception& ex) {
        std::cerr << "Error: " << ex.what() << std::endl;
        return 1;
    }
    
    return 0;
}